home *** CD-ROM | disk | FTP | other *** search
- ''
- '' $Id: NLMenu.bas,v 1.9 1994/05/05 14:35:59 alex Rel $
- ''
- '' Show use of NewLook menus using Intuition, GadTools and Locale
- ''
- '' Derived from example (c) Copyright 1992 Commodore-Amiga, Inc.
- ''
-
- DEFINT A-Z
- REM $NOWINDOW
- 'REM $INCLUDE Exec.bh
- 'REM $INCLUDE Locale.bh
- 'REM $INCLUDE Graphics.bh
- 'REM $INCLUDE DiskFont.bh
- 'REM $INCLUDE Intuition.bh
- 'REM $INCLUDE GadTools.bh
- 'REM $INCLUDE ASL.bh
- 'REM $INCLUDE Utility.bc
-
- REM $INCLUDE BLib/GadToolsMenus.bas ' gadtools menu builder helper
-
- LIBRARY OPEN "exec.library", 36
- LIBRARY OPEN "graphics.library", LIBRARY_MINIMUM&
- LIBRARY OPEN "diskfont.library", LIBRARY_MINIMUM&
- LIBRARY OPEN "intuition.library", 36
- LIBRARY OPEN "gadtools.library", LIBRARY_MINIMUM&
- LIBRARY OPEN "asl.library", LIBRARY_MINIMUM&
-
- REM $INCLUDE NLMenu_strings.bc ' localized string IDs
- REM $INCLUDE NLMenu_strings.bas ' default strings
- REM $INCLUDE BLib/GetCString.bas ' localization helper
-
- DIM SHARED tl&(40) ' generic TagList; space for 20 tags
- DIM SHARED mysc& ' default public screen
- DIM SHARED vi& ' GadTools ViewInfo
- DIM SHARED dri& ' screen DrawInfo
- DIM SHARED localeInfo&(2) ' Localization info (if locale.library available)
-
- DIM SHARED junk&
-
- '
- ' liStr - function to simplify getting a localized string from the catalog
- '
- FUNCTION liStr$(BYVAL id&)
- liStr$ = PEEK$(GetCString&(VARPTR(localeInfo&(0)), id&))
- END FUNCTION
-
- '
- ' createMenuStrip - create a complete menu strip
- '
- FUNCTION createMenuStrip&(nmList&, BYVAL tattr&)
- SHARED scaledcheck&, scaledamigakey&, vi&
- STATIC nmEntry&, strip&
-
- createMenuStrip& = NULL&
- nmList& = MenuAlloc&(nmEntry&, 19) 'space for 19 items (including the MenuEnd)
- IF nmList& THEN
- IF MenuTitle(nmEntry&, liStr$(MSG_PROJECT_MENU&), 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_PROJECT_OPEN&), liStr$(MSG_PROJECT_OPEN_CK&), 0, 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_PROJECT_SAVE&), liStr$(MSG_PROJECT_SAVE_CK&), 0, 0, NULL&) AND _
- MenuItem(nmEntry&, "", "", 0, 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_PROJECT_PRINT&), "", 0, 0, NULL&) AND _
- MenuSubItem(nmEntry&, liStr$(MSG_PROJECT_PRINT_DRAFT&), liStr$(MSG_PROJECT_PRINT_DRAFT_CK&), CHECKIT& OR CHECKED&, NOT 1&, NULL&) AND _
- MenuSubItem(nmEntry&, liStr$(MSG_PROJECT_PRINT_NLQ&), liStr$(MSG_PROJECT_PRINT_NLQ_CK&), CHECKIT&, NOT 2&, NULL&) AND _
- MenuSubItem(nmEntry&, liStr$(MSG_PROJECT_PRINT_LASER&), liStr$(MSG_PROJECT_PRINT_LASER_CK&), CHECKIT&, NOT 4&, NULL&) AND _
- MenuItem(nmEntry&, "", "", 0, 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_PROJECT_QUIT&), liStr$(MSG_PROJECT_QUIT_CK&), 0, 0, NULL&) AND _
- _
- MenuTitle(nmEntry&, liStr$(MSG_EDIT_MENU&), 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_EDIT_CUT&), liStr$(MSG_EDIT_CUT_CK&), 0, 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_EDIT_COPY&), liStr$(MSG_EDIT_COPY_CK&), 0, 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_EDIT_PASTE&), liStr$(MSG_EDIT_PASTE_CK&), 0, 0, NULL&) AND _
- MenuItem(nmEntry&, "", "", 0, 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_EDIT_ERASE&), liStr$(MSG_EDIT_ERASE_CK&), 0, 0, NULL&) AND _
- MenuItem(nmEntry&, "", "", 0, 0, NULL&) AND _
- MenuItem(nmEntry&, liStr$(MSG_EDIT_UNDO&), liStr$(MSG_EDIT_UNDO_CK&), 0, 0, NULL&) THEN
- IF MenuEnd(nmEntry&, strip&, nmList&, tattr&, vi&, _
- scaledcheck&, scaledamigakey&) THEN
- createMenuStrip& = strip&
- ELSE
- MenuFree nmList&, strip&
- END IF
- ELSE
- MenuFree nmList&, strip&
- END IF
- END IF
- END FUNCTION
-
- SUB main
- SHARED scaledcheck&, scaledamigakey&
- STATIC strip&, tattr&, customfont&, win&, nmList&, fo&, done
- STATIC imsg&, imsgClass&, imsgCode
-
- ' try to open the locale library (taking care to ignore errors)
- LIBRARY VARPTR "locale.library", OpenLibrary&(SADD("locale.library" + CHR$(0)), 38)
-
- ' no problem if it doesn't open
- localeInfo&(0) = LIBRARY("locale.library")
- IF LIBRARY("locale.library") <> NULL& THEN
- localeInfo&(1) = OpenCatalogA(NULL&, SADD("NLMenu.catalog" + CHR$(0)), NULL&)
- END IF
-
- mysc& = LockPubScreen&(NULL&) 'lock the default public screen
- IF mysc& THEN
- vi& = GetVisualInfoA&(mysc&, NULL&) 'get GadTools visual info for the screen
- IF vi& THEN
- dri& = GetScreenDrawInfo&(mysc&) 'and screen DrawInfo
- IF dri& THEN
- tattr& = PEEKL(mysc& + ScreenFont) 'default screen font
-
- customfont& = 0
- scaledcheck& = 0
- scaledamigakey& = 0
- TAGLIST VARPTR(tl&(0)), _
- ASLFO_Screen&, mysc&, _
- ASLFO_InitialName&, PEEKL(tattr& + ta_Name), _
- ASLFO_InitialSize&, PEEKW(tattr& + ta_YSize), _
- ASLFO_MaxHeight&, 32767, _
- TAG_END&
-
-
- fo& = AllocAslRequest&(ASL_FontRequest&, VARPTR(tl&(0)))
- IF fo& THEN
- IF AslRequest&(fo&, NULL&) THEN
- tattr& = AllocMem&(TextAttr_sizeof, MEMF_CLEAR& OR MEMF_PUBLIC&)
- CopyMem fo& + fo_Attr, tattr&, TextAttr_sizeof
- POKEB tattr& + ta_Style, 0
- POKEB tattr& + ta_Flags, 0
-
- customfont& = OpenDiskFont&(tattr&)
-
- 'Generate a custom checkmark whose size matches our custom font
- TAGLIST VARPTR(tl&(0)), _
- SYSIA_DrawInfo&, dri&, _
- SYSIA_Which&, MENUCHECK&, _
- SYSIA_ReferenceFont&, customfont&, _
- TAG_END&
- scaledcheck& = NewObjectA&(NULL&, SADD("sysiclass" + CHR$(0)), VARPTR(tl&(0)))
-
- 'Generate a custom Amiga-key image whose size matches our custom font
- TAGLIST VARPTR(tl&(0)), _
- SYSIA_DrawInfo&, dri&, _
- SYSIA_Which&, AMIGAKEY&, _
- SYSIA_ReferenceFont&, customfont&, _
- TAG_END&
- scaledamigakey& = NewObjectA&(NULL&, SADD("sysiclass" + CHR$(0)), VARPTR(tl&(0)))
- ELSE
- FreeAslRequest fo&
- END IF
- END IF
-
- strip& = createMenuStrip&(nmList&, tattr&)
-
- TAGLIST VARPTR(tl&(0)), _
- WA_Checkmark&, scaledcheck&, _
- WA_AmigaKey&, scaledamigakey&, _
- WA_Width&, 500, _
- WA_InnerHeight&, 100, _
- WA_Top&, 50, _
- WA_Activate&, TRUE&, _
- WA_DragBar&, TRUE&, _
- WA_DepthGadget&, TRUE&, _
- WA_CloseGadget&, TRUE&, _
- WA_SizeGadget&, TRUE&, _
- WA_SmartRefresh&, TRUE&, _
- WA_NoCareRefresh&, TRUE&, _
- WA_IDCMP&, IDCMP_CLOSEWINDOW& OR IDCMP_MENUPICK&, _
- WA_MinWidth&, 50, _
- WA_MinHeight&, 50, _
- WA_NewLookMenus&, TRUE&, _
- TAG_END&
-
- IF scaledcheck& = NULL& OR scaledamigakey& = NULL& THEN
- 'if you don't have these scaled, mark their tags as ignored
-
- tl&(0) = TAG_IGNORE&
- tl&(2) = TAG_IGNORE&
- END IF
-
- win& = OpenWindowTagList&(NULL&, VARPTR(tl&(0)))
- junk& = SetMenuStrip&(win&, strip&)
-
- done = FALSE&
- WHILE done = FALSE&
- imsg& = WaitPort&(PEEKL(win& + UserPort))
- DO
- imsg& = GetMsg&(PEEKL(win& + UserPort))
- IF imsg& = NULL& THEN EXIT DO
- imsgClass& = PEEKL(imsg& + Class)
- imsgCode = PEEKW(imsg& + IntuiMessageCode)
- ReplyMsg imsg&
- SELECT CASE imsgClass&
- CASE IDCMP_CLOSEWINDOW&
- done = TRUE&
- END SELECT
- LOOP
- WEND
-
- ClearMenuStrip win&
- CloseWindow win&
- MenuFree nmList&, strip&
-
- IF customfont& THEN
- FreeAslRequest fo&
- FreeMem tattr&, TextAttr_sizeof
- CloseFont customfont&
- DisposeObject scaledamigakey&
- DisposeObject scaledcheck&
- END IF
- END IF
- FreeVisualInfo vi&
- END IF
- FreeScreenDrawInfo mysc&, dri&
- END IF
- UnlockPubScreen NULL&, mysc&
- IF LIBRARY("locale.library") <> NULL& THEN
- CloseCatalog localeInfo&(1) ' CloseCatalog NULL& is safe
- END IF
- END SUB
-
- main
- END
-